#ifndef __APP_FILE_H__
#define __APP_FILE_H__

#ifdef __cplusplus
extern "C" {
#endif

#include "bsp_board.h"

#define IH_MAGIC				0x27051956	/* Image Magic Number	*/
#define IH_NMLEN				32			/* Image Name Length	*/
#define IMAGE_HEADER_LEN		64			/* Image Header Length 	*/
#define APP_FILE_CAPACITY		2			/* 文件容量 */
#define APP_FILE_NAME_LEN		13			/* 文件名最大长度 */
#define APP_FILE_PACKET_LEN		0x800		/* 每次读取文件长度 */
#define SZ_TBL 					20



/* 文件结构体 */
typedef struct{
	__be32		ih_magic;	/* Image Header Magic Number	*/
	__be32		ih_hcrc;	/* Image Header CRC Checksum	*/
	__be32		ih_time;	/* Image Creation Timestamp	*/
	__be32		ih_size;	/* Image Data Size		*/
	__be32		ih_load;	/* Data	 Load  Address		*/
	__be32		ih_ep;		/* Entry Point Address		*/
	__be32		ih_dcrc;	/* Image Data CRC Checksum	*/
	uint8_t		ih_os;		/* Operating System		*/
	uint8_t		ih_arch;	/* CPU architecture		*/
	uint8_t		ih_type;	/* Image Type			*/
	uint8_t		ih_comp;	/* Compression Type		*/
	uint8_t		ih_name[IH_NMLEN];	/* Image Name		*/

}image_header_t;

/* 升级文件信息结构体 */
typedef struct {
	uint8_t  file_name[APP_FILE_NAME_LEN];	// 文件名称
	uint32_t file_size;						// 文件大小
	uint16_t file_header_len;				// 文件头部长度
	uint16_t total_packet_count;			// 分包读取(2kbytes/包)
	uint16_t cur_packet_index;				// 当前读取包数
}up_file_info_t;


/* 文件信息结构体 */
typedef struct{
	uint8_t count;		
	image_header_t 	   *ih_file;
	up_file_info_t     *up_file_info[APP_FILE_CAPACITY];
	uint8_t is_at32_up;
	uint8_t is_ac63_up;
}app_file_t;

/**
***********************************************************
* @brief	查找.up文件
* @param	文件信息指针 	
* @return 	状态
***********************************************************
*/
uint8_t app_file_find(app_file_t	 *app_file);
uint8_t app_file_read(app_file_t *app_file, uint8_t *pbuff);


#ifdef __cplusplus
}
#endif
#endif /* __APP_FILE_H__ */
